package com.outstanding.ifml.parser;

import java.io.InputStream;

import com.outstanding.ifml.IFMLPaserProperties;
import com.outstanding.ifml.warpper.Liner;

/**
 * 词法分析器
 * @author chenzhixuan
 *
 */
public interface IFMLLexer {
	
	//spi初始化函数
	public void init(InputStream input,IFMLPaserProperties properties);
	
	//为了方便调试，设置当前行
	public void setCurLiner(Liner curLiner) ;
	//0x1A SUB 在文本文件中表示结束 0x1A 就是 ctrl+z 
	//EOI行结束符
	public final static byte EOI            = 0x1A;
	//0x0A LF 表示换行
	//0x0D CR 表示回车
	
//	//往下走一个字符
	public void nextToken();

	//返回当前的字符对应的ascii码
    int token();
    
    //获取当前的字符
    char getChar();
    
    
    //读取下一个有效字符（过滤空格）的类型
    public void readNextToken();
    
  
    //返回一个变量，除非遇到非字符(非字母，数字，- , _ ,中文,})
    public String identifierVal(char[] c);
    public String identifierVal(char c);
    
    //获取注释,需要解析器通过上下文判断是否为注释，一直访问到最后一个字符
    public String commentVal();
    
    //获取"后面的字符，直到遇到一个"
    public String doubleQuotationStringVal();
    
    
    //获取'后面的字符，直到遇到一个'
    public String singleQuotationStringVal();
    
    //获取[后面的字符，直到遇到一个]
    public String[] arrayStringVal();
    
    
    //获取{后面的字符，直到遇到一个}
    public String LbraceStringVal();

    public IFMLPaserProperties getProperties();
}
